package com.spring.dive.a06array;

import java.lang.reflect.Array;
import java.util.ArrayList;

/**
 * 泛型与数组
 * 1.可以声明带反省的数组引用，但是不能直接创建带泛型的数组对象
 */
public class DiveArrayTest {
    public static void main(String[] args) {
        // 1.可以声明带反省的数组引用，但是不能直接创建带泛型的数组对象
        // 【不推荐】原生的数组创建，不指定泛型(但是可能产生类型转换异常)
        ArrayList[] strArray = new ArrayList[5];
        ArrayList<String>[] listArray = strArray;
        // 【推荐】将原生可行的构造封装起来，直接使用
        ArrayList<String>[] listArray2 = new ArrayList[5];

        // 2.使用java.lang.reflect.Array的newInstance<Class class,int length>创建数组
        ArrayList<String>[] listArray3 = (ArrayList<String>[]) Array.newInstance(ArrayList.class, 5);
        ArrayList<String> child1 = new ArrayList<String>();
        child1.add("1");
        listArray3[0] = child1;
        System.out.println(listArray3);

        // 2.使用java.lang.reflect.Array的newInstance<Class class,int length>创建数组,封装对象的数组
        DiveArray diveArray = new DiveArray(Integer.class, 5);
        diveArray.add(0,10);
        diveArray.add(1,20);
        // 打印结果：DiveArray{array=[10, 20, null, null, null]}
        System.out.println(diveArray);

    }
}
